package liStack;

import java.util.ArrayList;
import java.util.List;

/**
 * 在一个由小写字母构成的字符串 s 中，包含由一些连续的相同字符所构成的分组。
 * <p>
 * 例如，在字符串 s = "abbxxxxzyy" 中，就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
 * <p>
 * 分组可以用区间 [start, end] 表示，其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。
 * <p>
 * 我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
 * <p>
 * 找到每一个 较大分组 的区间，按起始位置下标递增顺序排序后，返回结果。
 * <p>
 * <p>
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/positions-of-large-groups
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "abbxxxxzzy"
 * 输出：[[3,6]]
 * 解释："xxxx" 是一个起始于 3 且终止于 6 的较大分组。
 * <p>
 * 示例 2：
 * <p>
 * 输入：s = "abc"
 * 输出：[]
 * 解释："a","b" 和 "c" 均不是符合要求的较大分组。
 * <p>
 * 示例 3：
 * <p>
 * 输入：s = "abcdddeeeeaabbbcd"
 * 输出：[[3,5],[6,9],[12,14]]
 * 解释：较大分组为 "ddd", "eeee" 和 "bbb"
 * <p>
 * 示例 4：
 * <p>
 * 输入：s = "aba"
 * 输出：[]
 * <p>
 * <p>
 * <p>
 * 提示：
 * <p>
 * 1 <= s.length <= 1000
 * s 仅含小写英文字母
 */
public class Stack_830 {
    /**
     *自己的解题思路
     * @param s
     * @return
     */
    public List<List<Integer>> largeGroupPositions(String s) {
        List<List<Integer>> LLists = new ArrayList<>();
        int i = 0;
        if (s.length() >= 3) {
            while (i < s.length()) {
                int count = 1;
                int j = i + 1;
                for (; j < s.length(); j++) {
                    if (s.charAt(i) == s.charAt(j)) {
                        count++;
                    } else {
                        if (count >= 3) {
                            List<Integer> list = new ArrayList<>();
                            list.add(i);
                            list.add(j - 1);
                            LLists.add(list);
                        }
                        i = j;
                        break;
                    }
                }
                if (j >= s.length()) {
                    if (count >= 3) {
                        List<Integer> list = new ArrayList<>();
                        list.add(i);
                        list.add(j - 1);
                        LLists.add(list);
                    }
                    break;
                }

            }
        }
        return LLists;
    }

    public List<List<Integer>> largeGroupPositions2(String s) {
        List<List<Integer>> LLists = new ArrayList<>();
        int i = 0;
        if (s.length() >= 3) {
            while (i < s.length()) {
                int count = 1;
                while ((i+count)<s.length()&&s.charAt(i)==s.charAt(i+count)){
                    count++;
                }
                if (count>=3){
                    ArrayList<Integer> list=new ArrayList<>();
                    list.add(i);
                    list.add(i+count-1);
                    LLists.add(list);
                }
                i+=count;
            }
        }
        return LLists;
    }
    public static void main(String[] args) {
        Stack_830 stack_830 = new Stack_830();

        System.out.println(stack_830.largeGroupPositions2("aaa"));
    }
}
